#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//写一个函数返回参数二进制中 1 的个数。
// 方法三，效率较高
int number_of_1(int m)
{
	int count = 0;
	while (m)
	{
		m = m & (m - 1);//这个表达式可使得m二进制位最右边的1消失
		count++;
	}
	return count;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = number_of_1(n);
	printf("%d", ret);
	return 0;
}
////方法二
//int number_of_1(int m)
//{
//	int count = 0;
//	int i = 0;
//	for (i = 0; i < 32; i++)
//	{
//		if (((m >> i) & 1) == 1)
//			count++;
//	}
//	return count;
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int ret = number_of_1(n);
//	printf("%d", ret);
//	return 0;
//}
////方法一
//int number_of_1(unsigned int m)//将传入进来的数改为无符号的数字
//{
//    int count = 0;
//    while (m)//m为0就不会进去
//    {
//        if (m % 2 == 1)
//            count++;
//        m /= 2;
//    }
//    return count;
//}
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    int ret = number_of_1(n);
//    printf("%d", ret);
//    return 0;
//}